/*
 * @Author: wuqingchun
 * @Date: 2024-03-28 15:18:09
 * @Description: 
 * @LastEditors: wuqingchun
 * @LastEditTime: 2024-03-28 15:47:03
 */
#ifndef __MYMATH_H__
#define __MYMATH_H__

#include "export.h"

/**
 * C++ 编译器会修改符号（函数、变量）名称 name mangling，不同的C++编译器修改的方式并不一致
 * 1、生成动态库的编译器和使用动态库生成可执行程序的编译器有可能不一样
 * 2、动态库是用 C++ 写的，使用动态库用的是 C 语言编写的
 * 3、动态库是用 C 编写的，使用动态库的是 C++ 语言编写的
 * 4、动态库在使用的方式
 * 4.1 编译时链接 -lxxx
 * 4.2 运行时链接 dlopen、dlsym
 * 其中 dlopen 是 libc 库函数，进行符号名称查找时用的都是源代码中符号原始名称，如果名称被编译器修改，必然无法查找到对应的符号
 * 
 * 定义个规则，动态库中提供的符号（函数或变量，通常很少会导出变量），不论是实现者还是使用者，
 * 都不要对符号名称进行修改，也就是按照 C 编译器的方式进行处理
 * extern "C" { XXX }
 * 
 * 实际上这个行为是 C 编译器的本身的行为，写法上可以优化成如下写法
 * #ifdef __cplusplus
 * extern "C" {
 * #endif
 *       XXX 
 * #ifdef __cplusplus
 * }
 * #endif
 * 如果使用的是 C++ 编译器，不要对以下函数进行名称修改
 * 
 */
#ifdef __cplusplus
extern "C" {
#endif 

EXPORT int add(int iAdd1, int iAdd2);
EXPORT int sub(int iSub1, int iSub2);

#ifdef __cplusplus
}
#endif 
#endif //__MYMATH_H__